import logging
from rest_framework import viewsets

from ERP_5.utils.base_views import MultipleDestroyMixin
from basic_info.models import Nation, Province, City

from basic_info.serializer.area_serializer import NationSerializer, ProvinceSerializer, CitySerializer


logger = logging.getLogger('my')


class NationView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
    create:
    国家--新增
    
    国家新增, status: 201(成功), return: 新增国家信息
    
    destroy:
    国家--删除
    
    国家删除, status: 204(成功), return: None
    
    multiple_delete:
    国家--批量删除,必传参数：ids=[1,2,3,4...]
    
    国家批量删除, status: 204(成功), return: None
    
    update:
    国家--修改,只是修改国家名字。
    
    国家修改, status: 200(成功), return: 修改后的国家信息
    
    partial_update:
    国家--局部修改,只是修改国家名字。
    
    国家局部修改, status: 200(成功), return: 修改后的国家信息
    
    list:
    国家--获取列表
    
    国家列表信息, status: 200(成功), return: 国家信息列表
    
    retrieve:
    查询某一个国家
    
    查询指定ID的国家, status: 200(成功), return: 用户国家
    """

    queryset = Nation.objects.all()
    serializer_class = NationSerializer


class ProvinceView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
    create:
    省份--新增

    省份新增, status: 201(成功), return: 新增省份信息

    destroy:
    省份--删除

    省份删除, status: 204(成功), return: None

    multiple_delete:
    省份--批量删除,必传参数：ids=[1,2,3,4...]

    省份批量删除, status: 204(成功), return: None

    update:
    省份--修改,只是修改省份名字。

    省份修改, status: 200(成功), return: 修改后的省份信息

    partial_update:
    省份--局部修改,只是修改省份名字。

    省份局部修改, status: 200(成功), return: 修改后的省份信息

    list:
    省份--获取列表，请求参数为nid(国家ID), 没有传参数：表示所有省份列表。nid=x 表示查询该国家的省份列表

    省份列表信息, status: 200(成功), return: 省份信息列表

    retrieve:
    查询某一个省份

    查询指定ID的省份, status: 200(成功), return: 用户省份
    """

    queryset = Province.objects.all()
    serializer_class = ProvinceSerializer

    def get_queryset(self):
        # 请求参数为nid(国家ID), 没有传参数：表示所有省份列表。nid=x 表示查询该国家的省份列表
        nid = self.request.query_params.get('nid', None)
        if nid:
            nid = int(nid)
            return Province.objects.filter(nation__id=nid).all()
        else:
            return Province.objects.all()


class CityView(viewsets.ModelViewSet, MultipleDestroyMixin):
    """
    create:
    城市--新增

    城市新增, status: 201(成功), return: 新增城市信息

    destroy:
    城市--删除

    城市删除, status: 204(成功), return: None

    multiple_delete:
    城市--批量删除,必传参数：ids=[1,2,3,4...]

    城市批量删除, status: 204(成功), return: None

    update:
    城市--修改,只是修改城市名字。

    城市修改, status: 200(成功), return: 修改后的城市信息

    partial_update:
    城市--局部修改,只是修改城市名字。

    城市局部修改, status: 200(成功), return: 修改后的城市信息

    list:
    城市--获取列表，请求参数为pid(省份ID), 没有传参数：表示所有城市列表。pid=x 表示查询该省份下的城市列表

    城市列表信息, status: 200(成功), return: 城市信息列表

    retrieve:
    查询某一个城市

    查询指定ID的城市, status: 200(成功), return: 用户城市
    """

    queryset = City.objects.all()
    serializer_class = CitySerializer

    def get_queryset(self):
        # 请求参数为pid(省份ID), 没有传参数：表示所有城市列表。pid=x 表示查询该省份下的城市列表
        pid = self.request.query_params.get('pid', None)
        if pid:
            pid = int(pid)
            return City.objects.filter(province__id=pid).all()
        else:
            return City.objects.all()